package com.qf.dao.impl;

import com.qf.dao.AdminDao;
import com.qf.pojo.Admin;
import com.qf.pojo.User;
import com.qf.utils.DruidJdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.SQLException;
import java.util.List;

/**
 * @author 高圆圆
 * @date 2023/4/15 15:11
 * 管理员数据访问接口实现
 */
public class AdminDaoImpl implements AdminDao {
    /**
     * 通过管理员名查询指定管理员
     * @param username 管理员名称
     * @return 返回管理员实体
     */
    @Override
    public Admin selectAdmin(String username) throws SQLException {//中文用户名
        //执行对象
        QueryRunner qr  = new QueryRunner(DruidJdbcUtils.getDataSource()) ;
        //sql
        String sql = "select * from admin where username = ?" ;
        //执行
        Admin admin = qr.query(sql, new BeanHandler<>(Admin.class), username);
        return admin;//null
    }
    /**
     * 数据访问接口分页查询用户数据
     * @param currentPage 当前页码
     * @param pageSize    每页显示的条数
     * @return  返回用户列表
     */
    @Override
    public List<User> selectUserByPage(int currentPage, int pageSize) throws SQLException {
        //执行对象
        QueryRunner qr = new QueryRunner(DruidJdbcUtils.getDataSource()) ;
        //sql
        String sql = "select * from user limit ?,?" ;
        List<User> users = qr.query(sql, new BeanListHandler<>(User.class), (currentPage - 1) * pageSize, pageSize);
        return users;
    }

    /**
     * 获取用户的总记录数
     * @return 返回总条数
     */
    @Override
    public int getTotalCount() throws SQLException {
        //执行对象
        QueryRunner qr = new QueryRunner(DruidJdbcUtils.getDataSource()) ;
        //sql
        String sql = "select count(uid) from user" ;
        //查询
        Object obj = qr.query(sql, new ScalarHandler<>()) ;
        //String万能方法valueOf(obj)--->Integer.parseInt(数字字符串)
        int totalCount = Integer.parseInt(String.valueOf(obj));
        return totalCount;
    }

    /**
     * 管理员数据访问接口查询所有前台用户
     * @return 返回用户列表
     */
   /* @Override
    public List<User> selectAllUsers() throws SQLException {
        //执行对象
        QueryRunner qr = new QueryRunner(DruidJdbcUtils.getDataSource()) ;
        //sql
        String sql = "select * from user" ;
        //查询
        List<User> list = qr.query(sql, new BeanListHandler<>(User.class));
        return list;
    }*/

    /**
     * 管理员数据访问接口添加用户
     * @param user 用户实体
     */
    @Override
    public void insertUser(User user) throws SQLException {
       //执行对象
       QueryRunner qr = new QueryRunner(DruidJdbcUtils.getDataSource()) ;
       //sql
        String sql = "insert into user(uid,username,name,email,sex) values(?,?,?,?,?)" ;
         qr.update(sql,
                user.getUid(),
                user.getUsername(),
                user.getName(),
                user.getEmail(),
                user.getSex());
    }

    /**
     * 管理员数据访问接口通过用户id查询用户
     * @param uid 用户id
     * @return 返回用户实体
     */
    @Override
    public User selectUserByUid(String uid) throws SQLException {
        //执行对象
        QueryRunner qr  = new QueryRunner(DruidJdbcUtils.getDataSource()) ;
        //sql
        String sql = "select * from user where uid = ?" ;
        User user = qr.query(sql, new BeanHandler<>(User.class), uid);
        return user;
    }

    /**
     * dao层数据访问接口操作数据库---更新用户
     * @param user 用户实体
     */
    @Override
    public void updateUser(User user) throws SQLException {
        //执行对象
        QueryRunner qr  = new QueryRunner(DruidJdbcUtils.getDataSource()) ;
        //sql
        String sql = "update user set username=?,name=?,email=?,sex=? where uid= ?" ;
        qr.update(sql,
                user.getUsername(),
                user.getName(),
                user.getEmail(),
                user.getSex(),
                user.getUid()) ;
    }

    /**
     * 管理员数据访问接口,根据用户uid删除用户
     * @param uid 用户编号
     */
    @Override
    public void deleteUserByUid(String uid) throws SQLException {
       //执行对象
       QueryRunner qr = new QueryRunner(DruidJdbcUtils.getDataSource()) ;
       //sql
        String sql = "delete from user where uid = ?" ;
        qr.update(sql,uid) ;
    }
}
